import numpy as np

'''
练习numpy 数据的基本使用
'''


def new_np_arr():
    new_arr = np.array([1, 2, 3])
    # print(new_arr)
    # 元组类型转为np.array
    # print(np.asarray((1,2,3)))

    # 使用arange函数生成
    # print(np.arange(100, 124, 2).reshape(2,3,2))
    # print(np.arange(12.).reshape(4,3))

    '''
    线性函数可以理解为 y = kx
    np.linspace(0,9,10) 
    一共10个数 从0开始 当 x = 9 时 y = 9 ==> k = 1 所以为 0123456789
    np.linspace(0,9,6)  
    一共6个数 从0开始 当 x = 5 时 y = 9 ==> k = 9/5 = 1.8 所以为 0 1.8 3.6 5.4 7.2 9
    '''
    # print(np.linspace(0,9,10).reshape(5,2))
    # print(np.linspace(0,9,6))
    '''
       log函数可以理解为 y = log(x)
       np.linspace(0,9,6,base=np.e) base为基数 
       一共6个数 从0开始 e的9 次方为最后一个数 所以为 e的0次方 e的1.8次方 ...  e的9次方
    '''
    # print(np.logspace(0, 9, 6, base=np.e))

    '''
    判断：数组中的每一个元素都会进行判断并且返回True or False
    '''
    arr_arange = np.array([1,2,3])
    cond1 = arr_arange > 1
    if cond1.any():
        print("it need only one True")
    if cond1.all():
        print("it need all True")


    '''
    使用np.ones() , np.zeros()创建数组
    '''
    # print(np.ones((2, 3)))
    # print(np.zeros_like(np.ones((2, 3))))

    '''
    随机生成 
    0-1 连续均匀分布 np.random.rand(2, 3)
    指定上下界的连续均匀分布 np.random.uniform(-1, 1, (2, 3))
    
    '''
    # print(np.random.uniform(-1, 1, (2, 3)))

    # 新的生成方式
    # rng = np.random.default_rng(42)

    # 推荐的连续均匀分布用法
    # print(rng.random((2,3)))

    # 可以指定上下界，所以更加推荐这种用法
    # print(rng.uniform(0, 1, (2, 3)))

    # 随机数 0 - 10 生成两个
    # print(rng.integers(10, size=2))
    # 指定上下界
    # print(rng.integers(0, 10, (2, 3)))

    # 标准正分布
    # print(rng.standard_normal((2, 4)))

    # 上面推荐的高斯分布用法
    # print(rng.normal(0, 1, (3, 5)))

    # 创建数组
    rng = np.random.default_rng(seed=42)
    arr = rng.integers(1, 100, (3, 4))

    # 需要将多维度的数据铺平
    print(arr)

    # 扩展一个维度
    print(np.expand_dims(arr,1).shape)
    print(np.expand_dims(arr,1))

    # 扩充维度
    expanded = np.expand_dims(arr, axis=(1, 3, 4))
    print(expanded.shape)
    print(expanded)

    # 对应去除维度 axis对应的轴的维度必须为1
    print(np.squeeze(expanded, axis=1))

    # 去除所有维度为 1 的
    np.squeeze(expanded)

    '''
    reshape 成另一个形状  注意：不会改变原来数据 写成元组形式和直接参数没有区别
    也可以直接变为一维向量
    resize 成另一个形状， 注意：会改变原来数据
    '''
    print(arr.reshape(2, 2, 3),'==============')
    print(arr.reshape((2, 2, 3)))
    arr.resize()
    pass
if __name__ == '__main__':
    new_np_arr()
